import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// elementPlus按需导入
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        // ...
        AutoImport({
            resolvers: [ElementPlusResolver()]
        }),
        Components({
            resolvers: [
                // 1. 配置elementPlus采用sass样式配色系统
                ElementPlusResolver({ importStyle: 'sass' })
            ]
        })
    ],
    // 配置前端服务地址和端口
    server: {
        host: 'localhost',
        port: 8000
    },
    resolve: {
        // 实际的路径转换  @  -> src
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url))
        }
    },
    css: {
        preprocessorOptions: {
            scss: {
                // 2. 自动导入定制化样式文件进行样式覆盖
                additionalData: `
          @use "@/styles/element/index.scss" as *;
          @use "@/styles/var.scss" as *;
        `
            }
        }
    },
    build: {
        chunkSizeWarningLimit: 5000, // 加大限制的大小将500kb改成1500kb或者更大
        rollupOptions: {
            output: {
                manualChunks(id) {
                    if (id.includes('node_modules')) {
                        // 分解块，将大块分解成更小的块,在vite.config.js当中的build下面进行配置
                        return id.toString().split('node_modules/')[1].split('/')[0].toString()
                        // 但是生成的文件都在dist下面的assets文件下，里面既有js、css等等。
                    }
                },
                // 可以将不同的文件放在不同的文件下
                chunkFileNames: (chunkInfo) => {
                    const facadeModuleId = chunkInfo.facadeModuleId
                        ? chunkInfo.facadeModuleId.split('/')
                        : []
                    const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]'
                    return `js/${fileName}/[name].[hash].js`
                }
            }
        }
    }
})
